package com.unpor.controller;

import com.jfinal.aop.Before;
import com.jfinal.aop.Clear;
import com.jfinal.aop.Duang;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import com.unpor.interceptor.AInterceptor;
import com.unpor.interceptor.BInterceptor;
import com.unpor.interceptor.ClassControllerInterceptor;
import com.unpor.interceptor.MethodInterceptor;
import com.unpor.model.Blog;
import com.unpor.service.ServiceImpl;

import java.util.List;

/**
 * Created by benhailong on 2017/7/30.
 */
@Before(ClassControllerInterceptor.class) // 类Intercptor调用方法，只要访问下面的任意的方法都会访问上面的这个拦截器
public class IndexController extends Controller {

    public void index(){

        // 接收的参数
        // 1. getPara() 系列方法
        String msg = getPara("msg","defaultMesg");// msg如果前台不传值，默认使用后面的内容
        // 2. checkbox 接收数组
        String[] v = getParaValues("test");

        // 后台返回给前台的内容
        setAttr("msg","Hello,jinfal 3.0----->>>>>" + msg);
        getModel(Blog.class);
        renderTemplate("index.html");

//        forwardAction(); 服务器端跳转转发
//        redirect("");重定向

    }
    // 添加页面跳转
    public void add(){
        renderTemplate("add.html");
    }
    // 添加页面的提交方法
    public void doAdd(){

//        System.out.println(getModel(Blog.class,"b"));

        Blog blog = getModel(Blog.class,"b");
        blog.save();//增加

        renderText("提交成功....");
    }

    // 查询
    public void query(){

        String sql = "select * from t_blog order by id desc";

        List<Blog> blogs = Blog.dao.find(sql); // 查询所有信息
        // 返回json

//        Blog.dao.findById(1); // 查询第一条数据
        /**
         * 分页查询数据记录
         */
        Page<Blog> blogPage =  Blog.dao.paginate(1,1,"select *","from t_blog order by id desc");

        renderJson(blogs);
    }

    // 修改
    public void update(){
        Blog blog = new Blog();
        blog.set("id",1); // 跟新操作一定要先设置好主键
        blog.set("name","55555");
        blog.update();

        renderText("提交成功");
    }
    // 删除
    public void del(){
        Blog.dao.deleteById(2);
//        Db.update("sql语句");

        renderText("删除成功");
    }

    /*
    测试 MethodInterceptor 的永达
     */
    @Before(MethodInterceptor.class)
    public  void testMethod(){
        renderTemplate("index.html");
    }

    /**
     * 测试 InjectorInterceptor
     */
//    @Clear
    public void testInjectorMethod(){

        // 关键点
        ServiceImpl service = Duang.duang(ServiceImpl.class);
        service.testInject();

        renderTemplate("index.html");
    }

    /**
     * 组合拦截器栈
     */
    @Before({AInterceptor.class, BInterceptor.class})
    public void testInterceptorStack(){


        renderTemplate("index.html");
    }


}
